Digital signatures are used to sign a message generated by a correspondent so that the origin and authenticity of the message may subsequently be verified. In its basic form, a digital signature of a message is generated by signing the message with the originators private key. The message may then be recovered using the originators public key. A number of variants of this basic arrangement have been proposed with different attributes. Digital signature schemes are typically thought to fall into two generic classes, namely digital signatures with appendix and digital signatures with message recovery.
Digital signatures with appendix are categorized by the fact that the message signed is required as input to the verification algorithm. Although very popular (the DSS and ECDSA are examples of this mechanism) they may not provide as much bandwidth efficiency as other methods.
Digital signatures with message recovery are categorized by the fact that the message is not required as input to the verification algorithm. One goal when designing message recovery schemes is to defeat existential forgery attacks by defining a suitable redundancy function which will distinguish messages legitimately signed from signatures of random bit strings.
In many practical applications the data to be signed carries a certain amount of inherent redundancy. For example, four bytes of data might be reserved for the date but, in practice, 3 bytes suffice and so there are 8 bits of redundancy from this field. In order to ensure security it is necessary to provide a predetermined degree of redundancy within the message and accordingly the bandwidth efficiency is reduced.
To increase the bandwidth efficiency it is known to split the message in to two components, namely a hidden and a visible component. The hidden component is recovered during the verification process and the visible portion is used as an input to the recovery process. The hidden component must have sufficient redundancy to withstand an existential forgery attack and additional bits must be added to the message if it does not inherently possess this. In one of the proposed standards to implement such a scheme, ISO 9796 Part 2, the hidden component is utilised to generate a signature component c of the form DESR[H//SHA1(V)//IA] where
H is the hidden component,
V is the visible component
IA is an identifier of the signer
SHA1(V) is a cryptographic hash of the visible component, and
DESR is an encryption of the bit string.
This scheme however has the disadvantage that c is at least the number of bits in SHAT (V) bits longer, and, as it is included in the signature, the required bandwidth efficiency may not be achieved. Moreover, the scheme requires invocation of two hash operations as the value c is subsequently hashed for inclusion in the signature component. This computational complexity may make it unsuitable for certain applications.
It is therefore an object of the present invention to provide a signature scheme in which the above disadvantages are obviated or mitigated.
In general terms, one aspect of the present invention provides a signature scheme in which a message is divided in to a first portion which is hidden and is recovered during verification, and a second portion which is visible and is required as input to the verification algorithm. A first signature component is generated by encrypting the first portion alone. An intermediate component is formed by combining the first component and the visible portion and cryptographically hashing them. A second signature component is then formed using the intermediate component and the signature comprises the first and second components with the visible portion.
The generation of the first component from the first portion alone reduces the necessary bandwidth and simplifies the computation. The relative sizes of the first and second portions are determined by the application itself. In this manner, the redundancy function can be application dependent as opposed to a global primitive.
Recovery of the message can be completed using the signature and the public key of the sender.
According to a further aspect of the invention there is provided a verification of a signature of a message that has been subdivided into a hidden and visible portion. The verification combines a first component derived only from the hidden portion of the message with the visible portion and produces a hash of the combination. The computed hash is used together with publicly available information to generate a bit string corresponding to the hidden portion. If the required redundancy is present the signature is accepted and the message reconstructed from the recovered bit string and the visible portion.